امنيت برنامه های وب
امنيت برنامه های وب
Windows Authentication
Forms Authentication
Passport Authentication
شناسائی و تائيد کاربران
دستيابی از طريق کاربران ناشناس ( Anonymous )
• ورود به شبکه ( Logon ) به عنوان مديريت شبکه
• اجرای Computer Management ( از طريق : Start | Programs | Administrator Tools )
• انتخاب فولدر Users به منظور نمايش ليست کاربران
• مشاهده گروههائی که Account فوق به عنوان عضوی از آنان می باشد( کليک بر روی Member of ) . کاربران Anonymous ، بصورت پيش فرض ، عضوی از گروه Guests بوده که دارای مجوزهای اندکی می باشد. ASP.NET از ASP.NET Account ( با توجه به تنظيمات پيش فرض) ، به منظور اجرای برنامه وب استفاده می نمايد . بدين ترتيب ، در صورتيکه برنامه ای سعی در انجام عملياتی نمايد که در ليست مجوزهای ASP.NET Account وجود نداشته باشد ، يک مورد خاص امنيتی بوجود آمده و امکان دستيابی آن تائيد نخواهد شد.
به منظور اعمال محدوديت در دستيابی کاربران ناشناس می توان از تنظيمات مربوط به مجوزهای فايل ويندوز استفاده نمود . برای ايمن سازی ، سرويس دهنده می بايست دارای سيستم فايل NTFS باشد . سيستم های فايل FAT و يا FAT32 ، ايمن سازی در سطح فايل را ارائه نمی نمايند .
دستيابی از طريق کاربران تائيد شده
• Windows integrated authentication : در روش فوق ، شناسائی و تائيد کاربران بر اساس ليست کاربران تعريف شده بر روی سرويس دهنده انجام خواهد شد. در ادامه با توجه به مجوزها و امتيازات نسبت داده شده به هر Account ، امکان دستيابی و يا عدم دستيابی به منابع موجود بر روی سرويس دهنده ، فراهم می گردد.
• Forms authentication : در روش فوق ، کاربران به يک فرم وب Logon ، هدايت می گردند . در ادامه ، اطلاعات مربوط به نام و رمز عبور آنان اخذ و فرآيند شناسائی و تائيد بر اساس يک لسيت کاربران و يا از طريق يک بانک اطلاعاتی که برنامه حمايت می نمايد ، انجام خواهد شد.
• Passport authentication : در روش فوق ، کاربران جديد به يک سايت که توسط مايکروسافت ميزبان شده است ، هدايت می گردند .پس از ريجستر شدن کاربران ، امکان دستيابی آنان به چندين سايت ، فراهم خواهد شد( تمرکز در شناسائی کاربران و استفاده از سايت های متعدد با توجه به تائيد بعمل آمده ) .
هر يک از رويکردهای فوق ، به همراه روش دستيابی Anonymous ، دارای مزايای مختص به خود بوده و برای نوع خاصی از برنامه های وب ، مناسب می باشند :
• نوع برنامه : برنامه وب عمومی اينترنت
روش تائيد کاربران : Anonymous
توضيحات : روش عمومی دستيابی برای اغلب سايت های وب ، می باشد. در اين روش ، ضرورتی به Logon وجود نداشته و با استفاده از مجوزهای سيستم فايل NTFS ، می توان ايمن سازی منابعی را که قصد اعمال محدوديت در رابطه با دستيابی به آنان وجود دارد را انجام داد .
• نوع برنامه : برنامه وب اينترانت
روش تائيد کاربران : Windows integrated
توضيحات : در روش فوق ، سيستم معتبر سازی ويندوز ، کاربران شبکه را از طريق کنترل کننده Domain ، تائيد می نمايد. امکان دستيابی به منابع برنامه های وب بر اساس مجوزهای تعريف شده بر روی سرويس دهنده ، برای هر يک از کاربران فراهم می گردد .
• نوع برنامه : برنامه های وب تجاری
روش تائيد کاربران : Forms
توضيحات : برنامه هائی که نيازمند دريافت اطلاعات مالی می باشند ، می بايست از روش فوق به منظور اخذ و ذخيره سازی اطلاعات ، استفاده نمايند .
• نوع برنامه : برنامه های متعدد تجاری
روش تائيد کاربران : Passport
توضيحات : در روش فوق ، کاربران يک مرتبه Sign in نموده ( از طريق يک مرکز تائيد کاربران ) و امکان دستيابی و استفاده آنان از تمامی برنامه هائی که از Passport SDK استفاده می نمايند ، وجود خواهد داشت . اطلاعات کاربران در يک Passport profile نگهداری خواهدشد ( در مقابل استفاده از يک بانک اطلاعاتی محلی ) .
استفاده از Authentication در فايل های HTM و يا HTML
• انتخاب فولدر شامل برنامه وب و Properties از طريق Action Menu . در ادامه برنامه IIS ، جعبه محاوره ای Properties را نمايش خواهد داد .
• بر روی Directory Tab کليک نموده و در ادامه گزينه Configuration را انتخاب می نمائيم . IIS در ادامه جعبه محاوره ای Application Configuration را نمايش خواهد داد .
• بر روی دکمه Add کليک نموده و در ادامه IIS جعبه محاوره ای Add/Edit Application Extension Mapping را نمايش خواهد داد .
• بر دکمه Browse کليک نموده و فايل aspnet_isapi.dll را انتخاب می نمائيم .فايل فوق در دايرکتوری Windows Microsoft .Net Framework قرار داشته و مسير آن مشابه زير است :
Path for aspnet_isapi.dll |
C:\windows\Microsoft.NET\Framework\versionnumber\aspnet_isapi.dll |
• مراحل فوق ، برای فايل های با انشعاب html ، تکرار می گردد.
در Windows Authentication ، برنامه های وب مسئوليتی را در ارتباط با تائيد کاربران برعهده نگرفته و اين وظيفه تماما" به سيستم عامل ويندوز ، واگذار می گردد. فرآيند تائيد کاربران در روش فوق، بصورت زير است :
• کاربر درخواستی مبنی بر دريافت يک صفحه وب ايمن را از برنامه وب ، می نمايد .
• پس از دريافت درخواست توسط سرويس دهنده وب ، IIS عمليات بررسی صلاحيت کاربر را انجام خواهد داد . در اين راستا ، اطلاعات ارائه شده توسط کاربر در زمان logon ( نام و رمز عبور) ، با اطلاعات موجود بر روی سرويس دهنده وب و يا Domain ، مقايسه می گردد .
• در صورتيکه پس از بررسی مدارک ارائه شده توسط کاربر ( نام و رمز عبور ) ، وی به عنوان کاربر غير مجاز تشخيص داده شود ، درخواست وی ناديده گرفته خواهد شد .
• کامپيوتر سرويس گيرنده ، يک جعبه محاوره ای Logon را توليد و از کاربر درخواست درج اطلاعات مورد نياز ( نام و رمز عبور ) ، می گردد . پس از درج اطلاعات درخواستی توسط کاربر و ارسال آنان برای سرويس دهنده ، مجددا" IIS بررسی لازم در خصوص صحت آنان را انجام خواهد داد . در صورتيکه صحت اطلاعات ارسالی کاربر ( نام و رمز عبور ) تائيد گردد ، IIS درخواست اوليه کاربر را به سمت برنامه وب هدايت می نمايد .
• در آخرين مرحله و پس از بررسی و تائيد صلاحيت کاربر ، صفحه وب درخواستی برای کاربر ارسال می گردد .
مهمترين مزيت روش Windows Authentication ، استفاده مشترک از يک مدل امنيتی به منظور دستيابی به منابع موجود در شبکه و برنامه های وب است . پس از تعريف و اعطای مجوزهای لازم به کاربر ، امکان دستيابی وی به منابع موجود در شبکه و برنامه های وب بر اساس يک سيستم امنيتی مشابه و يکسان ، فراهم می گردد .
در زمان ايجاد يک پروژه جديد برنامه وب توسط ويژوال استوديو دات نت ، از روش Windows Authentication بصورت پيش فرض به منظور تائيد کاربران استفاده می گردد .پس از ايجاد يک پروژه جديد برنامه وب در ويژوال استوديو دات نت ، فايل Web.Config بصورت اتوماتيک ايجاد می گردد . ( يک فايل XML که اطلاعات متفاوتی را در ارتباط با پيکربندی رنامه وب در خود ذخيره می نمايد ) . محتوی پيش فرض اين فايل بصورت زير است ( صرفا" بخشی که با موضوع اين مقاله ارتباط دارد ، منعکس می گردد ) :
Web.Config default setting |
<authentication mode="Windows" /> |
در بخش مربوط به عنصر authentication ، سياست تائيد کاربران برنامه های وب مخشص می گردد . برای مشخص نمودن سياست فوق از خصلت mode مربوط به عنصر authentication ، استفاده شده که می تواند يکی از مقادير : Windows , Forms ,Passport و يا None را دارا باشد . در بخش authorization ، سياست های مربوط به کاربران مجاز برنامه وب مشخص می گردد . در اين رابطه می توان ، امکان دستيابی و يا عدم دستيابی به برنامه های وب را با مشخص نمودن کاربران و يا با توجه به وظايف آنان ، فراهم نمود. ( استفاده از کاراکتر " * " ، به معنی همه کاربران بوده و کاراکتر "؟" به منزله کاربران ناشناس و غيرمجاز است) . برای آشنائی با عملکرد روش Windows Authentication ، مراحل زير را دنبال می نمائيم :
• بخش authorization در فايل Web.Config را بصورت زير تغيير می نمائيم :
Authorization element |
<authorization> |
• تگ های زير را که يک جدول HTML را تعريف می نمايند ، در فرم وب شروع برنامه وب ، قرار می دهيم :
HTML Table in Startup web form |
<TABLE id="tblUser"> |
• به حالت Design view سوئيچ نموده و کد زير را در فايل Code Behind فرم وب شروع برنامه ، قرار می دهيم :
Web form's code-behind file |
Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load |
• پس از اجرای پروژه بصورت محلی ، ASP.NET تائيد کاربر را بر اساس نام و رمز عبوری که برای ورود به ويندوز استفاده شده است ، انجام خواهد د اد .
• پس از اجرای پروژه از راه دور ( مثلا" دستيابی از طريق اينترنت ) ، ASP.NET يک جعبه محاوره ای رادر مرورگر نمايش داده تا از طريق آن نام و رمز عبور کاربر دريافت گردد .
در صورتيکه نام و رمز عبور درج شده توسط کاربر با تعاريف انجام شده در Domain شبکه ، مطابقت نمايد ، ASP.NET کاربر را تائيد و مجوز لازم به منظور استفاده از برنامه وب صادر خواهد شد . در اين رابطه ASP.NET ، يک authorization certificate را به شکل يک کوکی صادر که در حين Session کاربر ، نگهداری و از آن استفاده می گردد. Session کاربر، پس از اتمام زمان Time out و يا بستن مرورگر ، خاتمه می يابد . برنامه وب اجرای خود را متناسب با مجوزهای تعريف شده در ارتباط با Account آغاز می نمايد .
روش Windows integrated authentication در يک شبکه مبتنی بر Domain بهتر کار خواهد کرد . شبکه هائی که از Workgroup استفاده می نمايند ( در مقابل استفاده از Domain ) دارای محدوديت های خاص خود به منظور استفاده از ويژگی های امنيتی ، می باشند. شبکه های مبتنی بر Domain ، از يک کنترل کننده Domain به منظور تائيد و معتبرسازی کاربران شبکه ، استفاده می نمايد .
با استفاده از امکانات ارائه شده در فايل Web.Config می توان يک لايه امنيتی مضاعف را ايجاد نمود . دراين راستا ، می توان تنظيمات لازم به منظور دستيابی و يا عدم دستيابی کاربران و يا گروه های خاصی از کاربران را نيز انجام داد .
اعمال محدوديت برای کاربران خاص ( دستيابی و يا عدم دستيابی )
Authorization element |
<authorization> |
به منظور اعمال محدوديت در دستيابی کاربرانی خاص ،می توان از عنصر <allow> استفاده و اسامی تمامی کاربران مجاز را با صراحت مشخص نمود (اسامی توسط ويرگول از يکديگر تفکيک می گردند) . پس از معرفی کاربران مجاز با استفاده از عنصر <allow> ، می بايست با بکارگيری عنصر <deny> ، امکان دستيابی به برنامه توسط کاربران غير مجاز، سلب می گردد .
Authorization element |
<authorization> |
ليست مجاز فوق ، امکان دستيابی دو کاربر که اسامی آنان با صراحت مشخص شده است را به برنامه وب خواهد داد. ساير کاربران ، امکان دستيابی به برنامه وب را دارا نخواهند بود ( نقش عنصر deny در مثال فوق ) علاوه بر ليست مجاز فوق که اسامی دو کاربر را مشخص و آنان را برای استفاده از برنامه وب مجاز می نمايد ، دو کاربر فوق ، می بايست دارای Account لازم در Domain شبکه نيز باشند .
تائيد کاربران بر اساس نوع وظيفه
Authorization element |
<authorization> |
پس از تائيد کاربر و صدور مجوز لازم به منظور استفاده از برنامه وب ، می توان با استفاده از خصلت Identity مربوط به شی User ، هويت کاربر ( نام و نوع وظيفه ) را از طريق برنامه شناسائی نمود.خصلت فوق، يک شی را که شامل اطلاعات مربوط به نام و وظيفه کاربراست را برمی گرداند .
Web form's code-behind file |
Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load |
به منظور آگاهی و انجام عمليات لازم با توجه به نوع وظيفه کاربر که از برنامه وب استفاده می نمايد ، می توان از متد IsInRole شی User ، استفاده نمود .
IsInRole method |
If User.IsInRole("Administrators") Then |
استفاده از تنظيمات IIS به همراه Windows Authentication
• در IIS بر روی فولدر برنامه وب کليک سمت راست نموده و در ادامه گزينه Properties را انتخاب می نمائيم . برنامه IIS در ادامه جعبه محاوره ای Properties مربوط به فولدر را نمايش خواهد داد .
• بر روی Directory Security Tab کليک و در ادامه دکمه Edit را در گروه Anonymous Access And Authentication Control کليک می نمائيم . IIS ، جعبه محاوره ای Authentication Methods را نمايش خواهد داد .
• اولين گروه از تنظيمات در جعبه محاوره ای ، کنترل دستيابی Anonymous را انجام می دهد ( همه کاربران ). غير فعال نمودن گزينه فوق ، معادل <"?" = deny User > در فايل Web.config است.
• Check Box های موجود در قسمت دوم جعبه محاوره ای ، مجاز بودن برنامه به منظور استفاده از Basic و يا Digest Authentication را علاوه بر Windows Authentication ، مشخص می نمايد. روش های فوق ، ايمنی بمراتب کمتری را نسبت به Windows Integrated ارائه می نمايند .می توان چندين روش authentication را در IIS فعال نمود . در صورتيکه چندين روش فعال شده باشد ، می توان با استفاده از متد AuthenticationType مربوط به شی Identity ، از روش استفاده شده به منظور تائيد کاربر ، آگاهی يافت .
AuthenticationType method |
Response.Write(User.Identity.AuthenticationType) |
در Forms Authentication ، برنامه IIS مسئوليتی را در ارتباط با تائيد کاربران برعهده نگرفته و تنظيمات امنيتی IIS در رابطه با برنامه وب ، دستيابی Anonymous می باشد . فرآيند تائيد کاربران در روش فوق، بصورت زير است :
• زمانيکه سرويس گيرنده درخواست يک صفحه ايمن را می نمايد ، IIS کاربر را به عنوان Anonymous، تائيد و در ادامه درخواست وی را برای ASP.NET ارسال می نمايد .
• ASP.NET ، بررسی لازم در خصوص وجود يک کوکی خاص بر روی کامپيوتر سرويس گيرنده را انجام خواهد داد .
• در صورتيکه کوکی ، موجود نبوده و يا غيرمعتبر باشد ، ASP.NET درخواست کاربر را ناديده گرفته و برای وی يک صفحه Logon را ارسال می نمايد ( مثلا" Login.aspx ).
• کاربر اطلاعات لازم ( نام و رمز عبور ) را در صفحه Logon.aspx ( به عنوان نمونه ) درج و در ادامه دکمه Submit موجود بر روی فرم را به منظور ارسال اطلاعات برای سرويس دهنده ، فعال می نمايد.
• IIS ، مجددا" کاربر را به عنوان Anonymous، تائيد و درخواست وی را برای ASP.NET ارسال می نمايد .
• ASP.NET ، تائيد کاربر را بر اساس اطلاعات ارسالی ( نام و رمز عبور ) انجام و يک کوکی را ايجاد می نمايد .
• در نهايت ، صفحه وب ايمن درخواست شده به همراه کوکی جديد برای سرويس گيرنده ارسال می گردد. ماداميکه کوکی معتبر باشد ، کاربر قادر به درخواست و مشاهده ساير صفحات وب می باشد.
فرآيند فوق را می توان به دو حالت متفاوت تعميم و مورد توجه قرار داد :
• حالت اول : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر غيرمجاز و تائيد نشده
مرحله اول : پس از درخواست يک سرويس گيرنده برای دستيابی به يک صفحه ايمن ، درخواست ارسالی وی در ابتدا توسط IIS بررسی و با توجه به اينکه تنظيمات IIS بصورت Anonymous پيکربندی شده تا امکان استفاده از Forms Authentication فراهم گردد ، درخواست کاربر ، مستقيما" برای ماژول ASP.NET Forms Authentication ارسال می گردد .
مرحله دوم : ASP.NET ، بررسی لازم در خصوص وجود ( داشتن ) يک کوکی Authentication را انجام خواهد داد . با توجه به اينکه کاربر اولين مرتبه است که درخواست اطلاعاتی را نموده و دارای يک کوکی نمی باشد ، سرويس گيرنده به صفحه Logon ، هدايت می گردد .
مرحله سوم : کاربراطلاعات ضروری ( نام و رمز عبور ) خود را در صفحه Logon درج و پس ازارسال آنان ،فرآيند بررسی اطلاعات ارسالی آغاز می گردد. در يک برنامه بزرگ ، بررسی اطلاعات کاربر از طريق يک بانک اطلاعاتی شامل مشخصات کاربران انجام می شود .
مرحله چهارم : در صورتيکه اطلاعات ارسالی کاربر ( نام و رمز عبور ) ، پس از بررسی توسط برنامه وب ، معتبر شناخته نگردند ، مجوز دستيابی برای کاربر صادر نشده و امکان دستيابی وی سلب می گردد .
مرحله پنجم : در صورتيکه پس از بررسی اطلاعات ارسالی، اعتبار وصحت آنان تائيد گردد ، يک کوکی تائيد ايجاد و در ادامه به کاربر مجوز لازم به منظور دستيابی به صفحه ، اعطاء می گردد .(هدايت کاربر به صفحه درخواست اوليه ) .
• حالت دوم : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر مجاز و تائيد شده
مرحله اول : پس از درخواست يک صفحه ايمن توسط سرويس گيرنده ، کوکی Authentication بهمراه درخواست وی برای سرويس دهنده ، ارسال می گردد.
مرحله دوم :درخواست ارسالی توسط سرويس گيرنده در ابتدا توسط IIS دريافت و با توجه به تنظيمات انجام شده ( دسيتابی Anonymous ) ، درخواست وی مستقيما" برای ASP.NET Forms Authentication ارسال می گردد .
مرحله سوم : ماژول ASP.NET Forms Authentication ، بررسی لازم در خصوص کوکی را انجام و در صورتيکه کوکی معتبر باشد ، سرويس گيرنده تائيد و امکان دستيابی و مشاهده صفحه وب درخواستی برای وی ، فراهم می گردد .
در روش Forms Authentication ، بصورت اتوماتيک يک فرم وب طراحی شده به منظور اخذ اطلاعات مربوط به نام و رمز عبور کاربران ، نمايش داده می شود . کد مرتبط با فرم وب ، عمليات تائيد و معتبرسازی کاربر را بر اساس ليست ذخيره شده در فايل Web.Config برنامه و يا از طريق يک بانک اطلاعاتی جداگانه ، انجام می دهد. مزيت مهم Forms Authentication ، عدم ضرورت عضويت کاربران در Domain شبکه به منظور دستيابی به برنامه وب ، می باشد .
فعال نمودن Forms Authentication
• مقداردهی Authentication mode در فايل Web.config به Forms
• ايجاد يک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )
• ايجاد يک فايل و يا بانک اطلاعاتی به منظور ذخيره نام و رمز عبور کاربران
• نوشتن کد لازم به منظور افزودن کاربر جديد به فايل و يا بانک اطلاعاتی کاربران
• نوشتن کد لازم به منظور تائيد کاربران با استناد به فايل و يا بانک اطلاعاتی کاربران
Forms Authentication ، از کلاس های موجود در namespace با نام System.Web.Security استفاده می نمايد . به منظور استفاده از کلاس های فوق، می بايست در ويژوال بيسک دات نت از عبارت Imports و در ويژوال سی شارپ از Using استفاده گردد ( در ابتدای هر ماژول که عمليات تائيد را انجام خواهد داد : Imports System.Web.Security ) .
مقداردهی Authentication mode
Web.Config setting for Forms Authentication |
<authentication mode="Forms"> |
کد فوق، يک نوع ساده از تائيد کاربران به روش Forms را نشان می دهد . در اين رابطه ، اغلب از تعاريف و تنظيمات پيش فرض و يک ليست کاربران مجاز، استفاده شده است. از عناصر متفاوتی در ارتباط با Forms Authentication در فايل Web.Config استفاده می گردد.هر يک از عناصر دارای خصلت های خاص خود می باشند :
• عنصر <authentication>
• عنصر <forms>
خصلت loginUrl .از خصلت فوق به منظور مشخص نمودن نام فرم وب Login برای کاربران تائيد نشده ، استفاده می گردد . مقدار پيش فرض خصلت فوق، Default.aspx است .
خصلت protection . با استفاده از خصلت فوق روش حفاظت کوکی Authentication که بر روی کامپيوتر سرويس گيرنده ذخيره می گردد ، مشخص خواهد شد. مقدار پيش فرض خصلت فوق ، All بوده که عمليات رمزنگاری و بررسی اعتبار و صحت داده در رابطه با آن اعمال می گردد. ساير گزينه های موجود در اين راستا ، Encryption,Validation و None می باشد .
خصلت timeout . با استفاده از خصلت فوق ، مدت زمان نگهداری کوکی Authentication بر روی ماشين کاربر مشخص می گردد . مقدار پيش فرض 30 دقيقه است . ASP.NET ، پس از دريافت يک درخواست جديد توسط کاربر و مشروط به گذشت بيش از نصف زمان تعريف شده ، کوکی را تجديد ( Renew ) خواهد کرد .
خصلت path . با استفاده از خصلت فوق ، مسير مورد نظر به منظور ذخيره سازی کوکی بر روی ماشين کاربر مشخص می گردد . مقدار پيش فرض ، "\" است .
• عنصر <credentials>
• عنصر <users>
خصلت password ، با استفاده از خصلت فوق ، رمز عبور کاربر مشخص می گردد.
عنصر <credentilas> ، امکان ذخيره سازی ليست کاربران را در Web.Config فراهم می نمايد . رويکرد فوق ، روشی ساده به منظور تعريف کاربران مجاز يک برنامه وب می باشد . در چنين مواردی ، مديريت سيستم می تواند بسادگی و در صورت لزوم نام و رمز عبور کاربران ديگری را به ليست مجاز کاربران ، اضافه نمايد . مکانيزم فوق ، در مواردی که قصد داشته باشيم ، امکان تعريف نام و رمز عبور را در اختيار کاربران قرار دهيم ، گزينه مناسبی نبوده و می بايست از يک فايل و يا بانک اطلاعاتی به منظور ذخيره سازی اطلاعات کاربران ، استفاده گردد.
به منظور استفاده از روش Forms Authentication ، می بايست مراحل زير را دنبال نمود :
• مقداردهی Authentication mode در فايل Web.config به Forms
• ايجاد يک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )
• ايجاد يک فايل و يا بانک اطلاعاتی به منظور ذخيره نام و رمز عبور کاربران
• نوشتن کد لازم به منظور افزودن کاربر جديد به فايل و يا بانک اطلاعاتی کاربران
• نوشتن کد لازم به منظور تائيد کاربران با استناد به فايل و يا بانک اطلاعاتی کاربران
در بخش سوم اين مقاله به بررسی اولين مرحله ( مقداردهی Authentication mode در فايل Web.config به Forms ) ، اشاره گرديد . در ادامه به بررسی ساير مراحل لازم به منظور استفاده از روش Forms Authentication ، خواهيم پرداخت .
Web.Config setting for Forms Authentication |
<authentication mode="Forms"> |
ايجاد يک فرم وب Logon
Login.aspx |
<%@ Page Language="vb" Codebehind="Login.aspx.vb" Inherits="Web1.Login" codePage="65001" %> |
Login.aspx.vb |
Imports System.Web.Security |
توضيحات
• متد Authenticate مربوط به کلاس FormsAuthentication با مراجعه به ليست کاربران تعريف شده توسط عنصر<credentials> فايل Web.Config ، بررسی لازم در خصوص نام ورمز عبور کاربر را انجام می دهد.
• متد RedirectFromLoginPage مربوط به کلاس FormsAuthentication ، صفحه شروع برنامه وب را نمايش خواهد داد.
• در صورتيکه نام و رمز عبور کاربر معتبر نباشد ، به کاربر دو مرتبه ديگر فرصت Logon داده خواهد شد و در صورتيکه صلاحيت کاربر تائيد نگردد ، يک پيام خطاء نمايش داده می شود. صفحه گزارش خطاء از نوع HTM می باشد.( به هيچکدام از فرم های وب موجود در برنامه ، امکان دستيابی وجود نخواهد داشت ). در صورتيکه کاربر با استفاده از روش فوق به صفحه ديگر هدايت می شود ، می بايست از محل استقرار فايل فوق در محيطی خارج از حوزه برنامه مطمئن گرديد .
در مثال فوق ، صفحه شروع برنامه Webform1.aspx ( در بخش دوم اين مقاله ) در نظر گرفته شده است . پس از Logon موفقيت آميز، کاربر به صفحه فوق هدايت خواهد شد . زمانيکه کاربر بر روی دکمه sign in کليک می نمايد ، تائيد کاربر بر اساس نام و رمز عبور انجام و برای وی يک مجوز صادر خواهد شد. بدين ترتيب، کاربر امکان دستيابی به بخش های متفاوت برنامه را بدست می آورد .
از کلاس FormsAuthentication به منظور Sign out ، و يا حذف کوکی Authentication از روی ماشين کاربر استفاده می گردد.کد زير دستيابی کاربر به برنامه را خاتمه داده و استفاده مجدد از برنامه توسط وی را ملزم به Login مجدد ، می نمايد .
End User's access to an application |
Imports System.Web.Security |
تائيد کاربران با استفاده از يک بانک اطلاعاتی
• اسامی کاربران می تواند به عنوان کليد اوليه و به منظور ذخيره سازی ساير اطلاعات کاربران استفاده گردد .
• بانک های اطلاعاتی دارای کارآئی مطلوب به منظور دستيابی به اسامی و رمز عبور کاربران می باشند .
• افزودن ، تغيير و دستيابی به رکوردهای بانک اطلاعاتی با استفاده از استانداردهای SQL انجام خواهد شد .
زمانيکه اسامی و رمز عبور کاربران در يک فايل و يا بانک اطلاعاتی ذخيره می گردد ، می توان با استفاده از متد HashPasswordeForStoringInConfigFile مربوط به کلاس FormsAuthentication ، آنان را رمز نمود. در اين رابطه از الگوريتم های SHA1 و يا MD5 به منظور رمزنگاری داده استفاده می گردد :
Encrypting User names and passwords |
Password = FormsAuthentication.HashPasswordForStoringInConfigFile ( Password , "SHA1") |
افزودن کاربران به يک بانک اطلاعاتی
َ
َAdding User to a database |
Private Sub butNewUser_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butNewUser.Click |
تابع AddUser ، که در روتين فوق استفاده شده است ، در ابتدا رمز عبور کاربر را رمز نموده و در ادامه با استفاده از دستور SQL INSERT ، نام و رمز عبور را در بانک اطلاعاتی ذخيره می نمايد .درصورتيکه رمز عبور در نظر گرفته شده توسط کاربر، قبلا" توسط کاربر ديگر تعريف و در بانک اطلاعاتی موجود باشد ، بلاک Exeption -handling ، خطاء را تشخيص داده و مقدار False را مبنی بر عدم افزودن اطلاعات کاربر در بانک اطلاعاتی ، برمی گرداند .
َ
َAddUser Function |
Private Function AddUser ( Byval UserName As String , ByVal Password As String ) As Boolean |
در زمان تائيد کاربران با استفاده از ليست مشخص شده کاربران در فايل Web.Config ، از متد Authenticate استفاده می گردد. در موارديکه برای تائيد کاربران از بانک اطلاعاتی استفاده می گردد ، می بايست کد لازم به منظور يافتن و مقايسه نام و رمز عبور کاربران ، نوشته گردد . روتين زير ، از تابع CheckPassword به منظور تائيد نام و رمز عبور استفاده نموده و در صورتيکه صلاحيت کاربر تائيد گردد به وی امکان دستيابی به برنامه داده خواهد شد.
َ
َAuthenticating Users from a database |
Private Sub butSignOn_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOn.Click |
تابع CheckPassword ، در ابتدا رمز عبور کاربر را با استفاده از الگوريتم مشخص شده ، رمز می نمايد. در ادامه ، رکورد بانک اطلاعاتی بر اساس نام جستجو و پس از يافتن رکورد مربوطه، مقايسه بين رمز عبور رمز شده در مقابل رمز عبور موجود در بانک اطلاعاتی ، انجام خواهد شد . دستيابی به بانک اطلاعاتی از طريق يک بلاک Exception handling انجام تا پيشگيری لازم در خصوص مسئله Locking ، انجام شود .
َ
َCheckPassword Function |
Private Function CheckPassword ( Byval UserName As String , ByVal Password As String ) As Boolean |
تمامی کاربران با توجه به تنظيمات انجام شده در بخش <authentication> فايل Web.config ، بصورت اتوماتيک به صفحه LoginBaseDb.aspx هدايت خواهند شد .
Web.Config file setting for <authentication> element |
<authentication mode="Forms"> |
صفحه LoginBaseDb.aspx :
در صورت درج نام و رمز عبور غيرمعتبر و فشردن دکمه "ورود به سايت " توسط کاربر ، يک پيام خطاء نمايش داده می شود ( در صورت تائيد نام و رمز عبور ، امکان دستيابی کاربر به برنامه فراهم می گردد) .
پس از درج نام و رمز عبور و فشردن دکمه " کاربر جديد " ، مشخصات کاربر در بانک اطلاعاتی کاربران ذخيره می گردد .
زمانيکه از سرويس وب Passport مايکروسافت به منظور تائيد کاربران استفاده می گردد ، مسئوليت تائيد کاربران از IIS و برنامه وب سلب شده و اين وظيفه به سايت Passport.com واگذار می گردد. در روش Passport Authentication ، شناسائی کاربران بر اساس سرويس وب ارائه شده توسط Passport.com صورت می پذيرد . در روش فوق ، تائيد کاربران متمرکز و پس از تائيد آنان ، امکان استفاده از ساير سايت هائی که از Passport Authentication استفاده می نمايند ، وجود خواهد داشت .اطلاعات کاربران در يک پروفايل و بر روی سايت Passport.com ذخيره و ساير سايت های متقاضی که نيازمند تائيد کاربر به منظور ارائه خدمات خود می باشند ، می توانند ازاطلاعات کاربران استفاده نمايند . مهمترين ويژگی روش Passport Authentication ، استفاده از يک نام و رمز عبور به منظور استفاده از سايت های متعدد می باشد . فرآيند تائيد کاربران در روش فوق، بصورت زير است :
• پس از درخواست يک صفحه ايمن توسط سرويس گيرنده ، درخواست وی در ابتدا برای IIS ارسال می گردد.
• IIS ، کاربر را به عنوان Anonymous تائيد و درخواست وی را برای ASP.NET ارسال می نمايد .
• ASP.NET ، بررسی لازم در خصوص وجود يک کوکی خاص را بر روی سرويس گيرنده انجام خواهد داد . در صورتيکه کوکی مورد نظر بر روی کامپيوتر سرويس گيرنده موجود نباشد ، درخواست کاربر ناديده گرفته شده و وی به وب سايت Passport.com به منظور تائيد صلاحيت ، هدايت می گردد .
• سايت Passport.com ، يک فرم Login را توليد و برای سرويس گيرنده ارسال می نمايد .سرويس گيرنده اطلاعات Logon را در آن درج و مجددا" اطلاعات را برای سايت Passport.com ارسال می نمايد .
• در صورتيکه اطلاعات درج شده توسط کاربر ( نام و رمز عبور) با اطلاعات موجود در بانک اطلاعاتی پاسپورت مطابقت نمايد ، Passport.com سرويس گيرنده را تائيد و يک کوکی به همراه اطلاعات ذيربط ( مشابه يک بليط ) برای وی ارسال می نمايد .
• درخواست سرويس گيرنده مجددا" برای سرويس دهنده و اين مرتبه به همراه مجوز صادر شده توسط Passport.com ، ارسال می گردد. IIS ، مجددا" سرويس گيرنده را به عنوان Anonymous تائيد و درخواست وی را برای برنامه وب ASP.NET ارسال می نمايد .
• برنامه وب ASP.NET تائيد کاربر را بر اساس مجوز صادر شده برای وی توسط Passport.com ، انجام داده و صفحه وب درخواستی را برای سرويس گيرنده ارسال می نمايد .
• پس از تائيد کاربر توسط Passport.com ، امکان دستيابی وی به ساير وب سايت هائی که از روش Passport Authentication استفاده می نمايند ، وجود خواهد داشت .
فعال نمودن روش Passport Authentication
• نصب Passport SDK . ( با اينکه نرم افزار فوق به همراه ويژوال استوديو ارائه نشده است ،ولی فريمورک دات نت دارای کلاس های لازم به منظور کار با Passport SDK پس از نصب آن می باشد ) .
• اعمال تغييرات لازم در فايل Web.config : نوع Authentication به Passport و مقدار عنصر Authorization به Deny برای کاربران تائيد نشده
• استفاده از رويداد PassportAuthentication_OnAuthenticate به منظور دستيابی به پروفايل اطلاعات کاربران و شناسائی آنان
• پياده سازی روتين Sign-out به منظور حذف کوکی های Passport از روی ماشين کاربران
فايل Web.config زير ، روش Passport Authentication را فعال و تمامی کاربران را ملزم به تائيد به منظور استفاده از برنامه وب می نمايد .
Web.Config setting |
<authentication mode="Passport" /> |
زمانيکه برنامه وب بصورت محلی و با توجه به تنظيمات فوق ، اجراء می گردد ، کاربر مستقيما" به صفحه Signin پاسپورت هدايت می گردد. در صورتيکه نسخه unlicense نرم افزار Passpport SDK ، نصب شده باشد ، صفحه Signin مشابه صفحه ارائه شده در زمان بکارگيری واقعی يک سايت نخواهد بود. پس از Sign in کاربر ، Passport کوکی تائيد کاربر را بر روی ماشين سرويس گيرنده ذخيره و وی را به صفحه اوليه درخواستی هدايـت و يک پروفايل اطلاعاتی در ارتباط با کاربر را ذخيره می نمايد . به منظور دستيابی به پروفايل فوق می توان از رويداد PassportAuthentication_OnAuthenticate ، در Global.asax استفاده نمود :
Global.asax module |
Imports System.Web.Security |
کد فوق ، نام ، آدرس و ساير اطلاعات کاربر را از طريق پروفايل مربوطه دريافت و آنان را نمايش می دهد.
مجوز صادر شده Passport به همراه اطلاعات پروفايل در پنج کوکی جداگانه بر روی ماشين سرويس گيرنده ، ذخيره می گرندد. پس از Sign out کاربر از برنامه وب ، می بايست کوکی های فوق حذف گردند . رويداد زير ، نحوه عمليات Sign out را از طريق حذف کوکی های مرتبط با Passport نشان می دهد :
Sign out Event Procedure |
Private Sub butSignOut_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOut.Click |
{{Fullname}} {{Creationdate}}
{{Body}}